package io.rehuo.modules.app.service.impl;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.rehuo.modules.app.dao.SmsTemplateDao;
import io.rehuo.modules.app.entity.SmsConfigEntity;
import io.rehuo.modules.app.entity.SmsTemplateEntity;
import io.rehuo.modules.app.enums.SmsCompanyType;
import io.rehuo.modules.app.enums.SmsTemplateType;
import io.rehuo.modules.app.service.SmsConfigService;
import io.rehuo.modules.app.service.SmsSendLogService;
import io.rehuo.modules.app.service.SmsTemplateService;
import io.rehuo.modules.app.utils.StrUtils;
import io.rehuo.modules.sms.Sms;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author shiguang on 2022/9/16 11:41
 */
@Service("smsTemplateService")
public class SmsTemplateServiceImpl extends ServiceImpl<SmsTemplateDao, SmsTemplateEntity> implements SmsTemplateService {

    @Autowired
    private SmsConfigService smsConfigService;

    @Autowired
    private SmsSendLogService smsSendLogService;

    @Override
    public boolean sendSms(String mobile, String code) {
        Boolean result = false;
        String companyName = "";
        //获取短信验证码模板
        SmsTemplateEntity smsTemplateEntity = baseMapper.selectOne(new QueryWrapper<SmsTemplateEntity>().eq("type", SmsTemplateType.VERIFICATION_CODE.getCode())
                .eq("status", "0")
                .eq("del_flag", "0"));
        if (ObjectUtil.isNotNull(smsTemplateEntity)) {
            //查找验证短信通道
            SmsConfigEntity configEntity = smsConfigService.getOne(new QueryWrapper<SmsConfigEntity>().eq("type", "0")
                    .eq("del_flag", "0")
                    .eq("status", "0"));
            if (ObjectUtil.isNotNull(configEntity)) {
                String content = StrUtils.replaceTemplate(code, smsTemplateEntity.getContent());
                if (configEntity.getCompanyType().equals(SmsCompanyType.NX.getCode())) {
                    companyName = SmsCompanyType.NX.getInfo();
                    result = Sms.sendSms(configEntity.getApiUrl(), configEntity.getAppKey(), configEntity.getSecretKey(), mobile, content);
                }else if(configEntity.getCompanyType().equals(SmsCompanyType.TYH.getCode())){
                    result = Sms.sendSmsNew(configEntity.getApiUrl(), configEntity.getAppKey(), configEntity.getSecretKey(),configEntity.getAppId(), mobile, content);
                    companyName = SmsCompanyType.TYH.getInfo();
                }
                smsSendLogService.asyncSaveSendLog(SmsTemplateType.VERIFICATION_CODE.getCode(),companyName,content,mobile,result);
                return result;
            }
        }
        return result;
    }
}
